﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using DECOR.BL.BE;
using System.Collections.Generic;
using DECOR.BL.BC;
using Newtonsoft.Json;

namespace DECOR.Touchapp
{
    public partial class guardarReclamo : System.Web.UI.Page
    {
        List<GenericBE> lstCodigoPostal = new List<GenericBE>();
        string pNumeroReclamo = ""; //parametro que se envia desde sencha
        string pNumeroPedido = ""; //parametro que se envia desde sencha
        string pMaterial1 = ""; //parametro que se envia desde sencha
        string pMaterial2 = ""; //parametro que se envia desde sencha
        string pIndiceResultado = ""; //parametro que se envia desde sencha
        DocReclamoBE DocReclamo = null; //parametro que se envia desde sencha
        string pPersonContacto = "";  //parametro que se envia desde sencha
        string pEmpResp = ""; //parametro que se envia desde sencha
        string pEmpresa = ""; //parametro que se envia desde sencha
        string pReclaRef = ""; //parametro que se envia desde sencha
        string pOfiVenta = ""; //parametro que se envia desde sencha
        string pFechaI = ""; //parametro que se envia desde sencha
        string pFechaF = ""; //parametro que se envia desde sencha
        string pHoraReclamoI = ""; //parametro que se envia desde sencha
        string pHoraReclamoF = ""; //parametro que se envia desde sencha
        string pMotivo = ""; //parametro que se envia desde sencha
        string pResultado = ""; //parametro que se envia desde sencha
        string pJustificResul = ""; //parametro que se envia desde sencha
        string pComentario = ""; //parametro que se envia desde sencha
        string pOrgVentas = ""; //parametro que se envia desde sencha
        string pCanal = ""; //parametro que se envia desde sencha
        string pSector = ""; //parametro que se envia desde sencha
        string pTextoTratemInicial = ""; //parametro que se envia desde sencha
        string pTextoNotaDireccion = ""; //parametro que se envia desde sencha
        string pTextoSeguimiento = ""; //parametro que se envia desde sencha 
        string pTextoDiagnostico = ""; //parametro que se envia desde sencha 
        string pTextoSolucion = ""; //parametro que se envia desde sencha 
        string pTextoPersonaContacto = ""; //parametro que se envia desde sencha 
        string pTextoDatosFacturacion = ""; //parametro que se envia desde sencha
        string pTextoPedidoReferencia = ""; //parametro que se envia desde sencha
        string pTextoMotivosOtros = ""; //parametro que se envia desde sencha
        string pEmail = ""; //parametro que se envia desde sencha
        string pCodpPContact = ""; //parametro que se envia desde sencha
        string pDirPContac = ""; //parametro que se envia desde sencha
        string pNIFCont = ""; //parametro que se envia desde sencha
        string pNomPContac = ""; //parametro que se envia desde sencha
        string pTelfCont = "";  //parametro que se envia desde sencha
        string pStatus = ""; //parametro que se envia desde sencha
        string pUsuarioStatus = ""; //parametro que se envia desde sencha
        string pFechaSts = ""; //parametro que se envia desde sencha
        string pDescripcion = ""; //parametro que se envia desde sencha

        string pLista = "";

        string op = "";
        string pRetval = "";
        string Json = "";
        //parametros que se devuelven
        string pNomCliente = "";
        string pEmpresaDet = "";
        string pNomEmpresa = "";
        string pDirEmpresa = "";
        string pNIF = "";
        string pTelfEmpre = "";
        string pCodpEmpresa = "";
        string pCodDestMerc = "";
        string pNomDestMerc = "";
        string pDirDestMerc = "";
        string pCodpDestMerc = "";
        string pCodECom = "";
        string pNomECom = "";
        string pNombreEmpResp = "";
        string pCodResPago = "";
        string pNomResPago = "";
        string pValidaNumeroPedido = "";
        string pValidaMaterial1 = "";
        string pValidaMaterial2 = "";

        DocReclamoBE objRec = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Request.HttpMethod.Equals("POST"))
            {
                
            }
            else
            {
                CredencialesController.cargarInfo(Request.Params); //(SIEMPRE)
                pLista = Request.Params["listaReclamo"] != null ? Request.Params["listaReclamo"] : "";
                string lstintelocutores = Request.Params["listaIntJson"] != null ? Request.Params["listaIntJson"] : "";
                pNumeroReclamo = Request.Params["pNumeroReclamo"] != null ? Request.Params["pNumeroReclamo"] : "";
                if (string.IsNullOrEmpty(pNumeroReclamo))
                {
                    op = "crear";
                }
                else
                {
                    op = "editar";
                }
                objRec = leerObjetoReclamo(pLista);
                objRec = LeerInterlocutoresZReclamo(lstintelocutores, pLista);
                
                
                pFechaI = objRec.Contactos.KTABG.ToString(); // Request.Params["fechaI"] != null ? Request.Params["fechaI"] : "";
                pFechaF = objRec.Contactos.KTAEN.ToString(); // Request.Params["fechaF"] != null ? Request.Params["fechaF"] : "";
                pHoraReclamoI = objRec.Contactos.KTABT; // Request.Params["horaReclamoI"] != null ? Request.Params["horaReclamoI"] : "";
                pHoraReclamoF = objRec.Contactos.KTAET; // Request.Params["horaReclamoF"] != null ? Request.Params["horaReclamoF"] : "";
                pEmpresa = objRec.Contactos.KUNNR; // Request.Params["empresa"] != null ? Request.Params["empresa"] : "";
                pNumeroPedido = objRec.Contactos.VGBEL; // Request.Params["numeroPedido"] != null ? Request.Params["numeroPedido"] : "";
                pComentario = objRec.Contactos.KTEXT; // Request.Params["comentario"] != null ? Request.Params["comentario"] : "";
                pMaterial1 = objRec.Z_Reclamo.MATNR; // Request.Params["material1"] != null ? Request.Params["material1"] : "";
                pMaterial2 = objRec.Z_Reclamo.MATNR2; // Request.Params["material2"] != null ? Request.Params["material2"] : "";
                pReclaRef = objRec.Z_Reclamo.RECLA; // Request.Params["reclamoRef"] != null ? Request.Params["reclamoRef"] : "";
                pTextoTratemInicial = Request.Params["TextoTratemInicial"] != null ? Request.Params["TextoTratemInicial"] : "";
                pTextoNotaDireccion = Request.Params["TextoNotaDireccion"] != null ? Request.Params["TextoNotaDireccion"] : "";
                pTextoSeguimiento = Request.Params["TextoSeguimiento"] != null ? Request.Params["TextoSeguimiento"] : "";
                pTextoDiagnostico = Request.Params["TextoDiagnostico"] != null ? Request.Params["TextoDiagnostico"] : "";
                pTextoSolucion = Request.Params["TextoSolucion"] != null ? Request.Params["TextoSolucion"] : "";
                pTextoPersonaContacto = Request.Params["TextoPersonaContacto"] != null ? Request.Params["TextoPersonaContacto"] : "";
                pTextoDatosFacturacion = Request.Params["TextoDatosFacturacion"] != null ? Request.Params["TextoDatosFacturacion"] : "";
                pTextoPedidoReferencia = Request.Params["TextoPedidoReferencia"] != null ? Request.Params["TextoPedidoReferencia"] : "";
                pTextoMotivosOtros = Request.Params["TextoMotivosOtros"] != null ? Request.Params["TextoMotivosOtros"] : "";
                pEmail = Request.Params["mail"] != null ? Request.Params["mail"] : "";
                pNIF = Request.Params["_nif"] != null ? Request.Params["_nif"] : "";
                pPersonContacto = Request.Params["PersonaContacto"] != null ? Request.Params["PersonaContacto"] : "";
                pNomPContac = Request.Params["NomPContac"] != null ? Request.Params["NomPContac"] : "";
                pDirPContac = Request.Params["DirPContac"] != null ? Request.Params["DirPContac"] : "";
                pNIFCont = Request.Params["NIFCont"] != null ? Request.Params["NIFCont"] : "";
                pTelfCont = Request.Params["TelfCont"] != null ? Request.Params["TelfCont"] : "";
                pCodpPContact = Request.Params["CodpPContac"] != null ? Request.Params["CodpPContac"] : "";
                pNomCliente = Request.Params["NomCliente"] != null ? Request.Params["NomCliente"] : "";
                pEmpresaDet = Request.Params["EmpresaDet"] != null ? Request.Params["EmpresaDet"] : "";
                pNomEmpresa = Request.Params["NomEmpresa"] != null ? Request.Params["NomEmpresa"] : "";
                pDirEmpresa = Request.Params["DirEmpresa"] != null ? Request.Params["DirEmpresa"] : "";
                pTelfEmpre = Request.Params["TelfEmpre"] != null ? Request.Params["TelfEmpre"] : "";
                pCodpEmpresa = Request.Params["CodpEmpresa"] != null ? Request.Params["CodpEmpresa"] : "";
                pCodDestMerc = Request.Params["CodDestMerc"] != null ? Request.Params["CodDestMerc"] : "";
                pNomDestMerc = Request.Params["NomDestMerc"] != null ? Request.Params["NomDestMerc"] : "";
                pDirDestMerc = Request.Params["DirDestMerc"] != null ? Request.Params["DirDestMerc"] : "";
                pCodpDestMerc = Request.Params["CodpDestMerc"] != null ? Request.Params["CodpDestMerc"] : "";
                pCodECom = Request.Params["CodECom"] != null ? Request.Params["CodECom"] : "";
                pNomECom = Request.Params["NomECom"] != null ? Request.Params["NomECom"] : "";
                pEmpResp = Request.Params["codigoEmpResp"] != null ? Request.Params["codigoEmpResp"] : "";
                pNombreEmpResp = Request.Params["nombreEmpResp"] != null ? Request.Params["nombreEmpResp"] : "";
                pCodResPago = Request.Params["CodResPago"] != null ? Request.Params["CodResPago"] : "";
                pNomResPago = Request.Params["NomResPago"] != null ? Request.Params["NomResPago"] : "";
                pOrgVentas = Request.Params["OrgVenta"] != null ? Request.Params["OrgVenta"] : "";
                pCanal = Request.Params["Canal"] != null ? Request.Params["Canal"] : "";
                pOfiVenta = Request.Params["OfiVenta"] != null ? Request.Params["OfiVenta"] : "";
                pMotivo = Request.Params["Motivo"] != null ? Request.Params["Motivo"] : "";
                pResultado = Request.Params["Resultado"] != null ? Request.Params["Resultado"] : "";
                pJustificResul = Request.Params["JustificResul"] != null ? Request.Params["JustificResul"] : "";
                pSector = Request.Params["Sector"] != null ? Request.Params["Sector"] : "";
                pStatus = Request.Params["Status"] != null ? Request.Params["Status"] : "";
                pUsuarioStatus = Request.Params["UsuarioStatus"] != null ? Request.Params["UsuarioStatus"] : "";
                pDescripcion = Request.Params["Descripcion"] != null ? Request.Params["Descripcion"] : "";
                pFechaSts = Request.Params["fechaSts"] != null ? Request.Params["fechaSts"] : "";

                if (string.IsNullOrEmpty(pNumeroReclamo))
                {
                    //si el numero de reclamos es nulo o vacio entonces vamos a guardar un nuevo documento
                    op = "crear";
                    pNumeroPedido = objRec.Contactos.VGBEL;                    
                    pIndiceResultado = Request.Params["pIndiceResultado"] != null ? Request.Params["pIndiceResultado"] : "";
                    pRetval = "{\"success\": {0}, \"errors\":{\"reason\": \"{1}\"}, ";
                    pRetval += "\"nroRec\": \"{23}\" ";
                    pRetval += "}";

                    GuardarReclamo(objRec);
                }
                else
                {
                    //si el numero de reclamo tiene un valor, entonces procedemos a modificarlo
                    op = "editar";
                    pNumeroPedido = Request.Params["pNumeroPedido"] != null ? Request.Params["pNumeroPedido"] : "";
                    pIndiceResultado = Request.Params["pIndiceResultado"] != null ? Request.Params["pIndiceResultado"] : "";

                    pRetval = "{\"success\": {0}, \"errors\":{\"reason\": \"{1}\"}, ";
                    pRetval += "\"nroRec\": \"{23}\" ";
                    pRetval += "}";

                    GuardarReclamo(objRec);
                }

                Response.ContentType = "application/json; charset=UTF-8";
                Response.Write(pRetval);
            }
        }

        private void GuardarReclamo(DocReclamoBE objReclamo)
        {
            string retval = string.Empty;
            GenericBE g = null;
            string nroRec = string.Empty;
            bool pasa = false;
            bool valida = true;
            try
            {
                if (op.Equals("editar"))
                {
                    if (string.IsNullOrEmpty(objReclamo.Contactos.VGBEL))
                    {
                        pRetval = pRetval.Replace("{0}", "false");
                        pRetval = pRetval.Replace("{1}", "Ingrese un número de pedido.");
                        return;
                    }    
                }

                if (objReclamo.Z_Reclamo.MATNR.TrimStart('0') == "" && objReclamo.Z_Reclamo.MATNR2.TrimStart('0') == "")
                {
                    pRetval = pRetval.Replace("{0}", "false");
                    pRetval = pRetval.Replace("{1}", "Ingrese un material asociado al pedido");
                    return;
                }
                //****************************************************************************
                if (string.IsNullOrEmpty(pIndiceResultado))
                {
                    pasa = false;
                }
                else
                {
                    if (Convert.ToInt32(pIndiceResultado) > 0)
                    {
                        pasa = true;
                    }
                }
                if (pasa)
                {
                    bool val = validaDatosMP();

                    if (val == true)
                    {
                        if (objReclamo.Texto != null)
                        {
                            string tratamieInicial = "";
                            string notaDireccion = "";
                            string personaContacto = "";

                            try { tratamieInicial = objReclamo.Texto.Find(x => x.CodTexto == "0001").Descripcion; }
                            catch { tratamieInicial = ""; }
                            try { notaDireccion = objReclamo.Texto.Find(x => x.CodTexto == "0004").Descripcion; }
                            catch { notaDireccion = ""; }
                            try { personaContacto = objReclamo.Texto.Find(x => x.CodTexto == "Z009").Descripcion; }
                            catch { personaContacto = ""; }                            
                            
                            if (tratamieInicial.Trim() == "")
                            {
                                pRetval = pRetval.Replace("{0}", "false");
                                pRetval = pRetval.Replace("{1}", "Ingrese el tratamiento inicial.");
                                return;
                            }
                            if (notaDireccion.Trim() == "")
                            {
                                pRetval = pRetval.Replace("{0}", "false");
                                pRetval = pRetval.Replace("{1}", "Ingrese una nota de dirección.");
                                return;
                            }
                            if (personaContacto.Trim() == "")
                            {
                                pRetval = pRetval.Replace("{0}", "false");
                                pRetval = pRetval.Replace("{1}", "Ingrese datos de la persona de contacto.");
                                return;
                            }
                        }
                        if (objReclamo.Interlocutor != null)
                        {
                            string email = "";
                            string nombrePC = "";
                            string direccionPC = "";
                            string ubicacionPC = "";
                            string telefonoPC = "";

                            try { email = objReclamo.Interlocutor.Find(x => x.PARVW == "AG").Mail; } catch { email = ""; }
                            try { nombrePC = objReclamo.Interlocutor.Find(x => x.PARVW == "AP").NOMBRE; } catch { nombrePC = "" ; }
                            try { direccionPC = objReclamo.Interlocutor.Find(x => x.PARVW == "AP").Direccion; } catch { direccionPC = ""; }
                            try { ubicacionPC = objReclamo.Interlocutor.Find(x => x.PARVW == "AP").CodPostal; } catch { ubicacionPC = ""; }
                            try { telefonoPC = objReclamo.Interlocutor.Find(x => x.PARVW == "AP").Telefono; } catch { telefonoPC = ""; }

                            if (email == null || email.Trim() == "")
                            {
                                //para reclamos se solicito que no debe pedir email obligatorio 25.09.2012 rhuapaya
                                //
                                //pRetval = pRetval.Replace("{0}", "false");
                                //pRetval = pRetval.Replace("{1}", "Ingrese un email para el solicitante.");
                                //return;
                            }
                            if (nombrePC == null || nombrePC.Trim() == "")
                            {
                                pRetval = pRetval.Replace("{0}", "false");
                                pRetval = pRetval.Replace("{1}", "Ingrese el nombre del interlocutor persona de contacto.");
                                return;
                            }
                            if (direccionPC == null || direccionPC.Trim() == "")
                            {
                                pRetval = pRetval.Replace("{0}", "false");
                                pRetval = pRetval.Replace("{1}", "Ingrese la direccion del interlocutor persona de contacto.");
                                return;
                            }
                            if (ubicacionPC == null || ubicacionPC.Trim() == "")
                            {
                                pRetval = pRetval.Replace("{0}", "false");
                                pRetval = pRetval.Replace("{1}", "Ingrese la ubicación del interlocutor persona de contacto.");
                                return;
                            }
                            if (telefonoPC == null || telefonoPC.Trim() == "")
                            {
                                pRetval = pRetval.Replace("{0}", "false");
                                pRetval = pRetval.Replace("{1}", "Ingrese el teléfono del interlocutor persona de contacto.");
                                return;
                            }
                        }
                    }
                    validaInterlocutores();
                    if (val == true)
                    {
                        if (op.Equals("editar"))
                        { 
                            g = ReclamoBC.Instance.set_ModificarReclamo(objRec); 
                        }
                        else
                        { 
                            g = ReclamoBC.Instance.set_Reclamo(objRec); 
                        }

                        if (op.Equals("crear"))
                        {
                            if (g.Descripcion.Trim().Length > 5)//el mensaje debe tener mas caracteres
                            {
                                nroRec = g.Descripcion.Substring(16, 10);
                                pRetval = pRetval.Replace("{0}", "true");
                                pRetval = pRetval.Replace("{1}", "");
                                pRetval = pRetval.Replace("{23}", nroRec);    
                            }
                            else
                            {
                                pRetval = pRetval.Replace("{0}", "false");
                                pRetval = pRetval.Replace("{1}", "El reclamo no se guardó.");
                                pRetval = pRetval.Replace("{23}", "");
                                return;
                            }
                        }
                        else if (op.Equals("editar"))
                        {
                            if (g.Descripcion.Trim().Length > 5)//el mensaje debe tener mas caracteres
                            {
                                nroRec = g.Descripcion.Substring(16, 10);
                                pRetval = pRetval.Replace("{0}", "true");
                                pRetval = pRetval.Replace("{1}", "");
                                pRetval = pRetval.Replace("{23}", pNumeroReclamo);
                            }
                            else
                            {
                                pRetval = pRetval.Replace("{0}", "false");
                                pRetval = pRetval.Replace("{1}", "El reclamo no se modificó.");
                                pRetval = pRetval.Replace("{23}", "");
                                return;
                            }
                        }
                    }
                    
                }
                else
                {
                    pRetval = pRetval.Replace("{0}", "false");
                    pRetval = pRetval.Replace("{1}", "Debe de seleccionar un resultado y una justificación.");
                    pRetval = pRetval.Replace("{23}", "");
                    return;
                }
            }
            catch (Exception ex)
            {
                pRetval = pRetval.Replace("{0}", "false");
                pRetval = pRetval.Replace("{1}", ex.Message);
                pRetval = pRetval.Replace("{23}", "");
                return;
            }
            finally
            {
                
            }
        }

        private void validaInterlocutores()
        {
            string ag = string.Empty;
            string ES = string.Empty;
            bool es = false;

            if (op.Equals("editar"))
            {
                foreach (InterlocutorReclamoBE i in objRec.Interlocutor)
                {
                    if (i.PARVW.Equals("AG"))
                    {
                        if (objRec.Interlocutor.Find(x => x.PARVW.Equals("AG")).EsVentual)
                        {
                            ag = objRec.Interlocutor.Find(x => x.PARVW.Equals("AG")).ADRNR;
                            ES = "X";
                        }
                        else
                        {
                            ag = objRec.Interlocutor.Find(x => x.PARVW.Equals("AG")).KUNNR;
                        }                            
                        break;
                    }
                }
                List<GenericBE> ladrnr = new List<GenericBE>();
                foreach (InterlocutorReclamoBE g in objRec.Interlocutor)
                {
                    GenericBE i = new GenericBE();
                    i.Codigo = g.PARVW;
                    i.Descripcion = g.ADRNR;
                    ladrnr.Add(i);
                }
                pPersonContacto = ""; //objRec.Texto.Find(x => x.CodTexto == ParametroBC.Instance.getParamValue("TEXTO6")).CodTexto;
                pEmpResp = objRec.Interlocutor.Find(x => x.PARVW == "ZM").PERNR;

                if (pPersonContacto == null) { pPersonContacto = ""; }
                if (pEmpResp == null) { pEmpResp = ""; };

                InterlocutorReclamoBE ge = null;
                try{ ge = objRec.Interlocutor.Find(x => x.PARVW.Equals("AP"));} catch { ge = null; }
               
                objRec.Interlocutor = ReclamoBC.Instance.getInterXEmpresa(ag, pPersonContacto, pEmpResp, string.Empty, string.Empty, ES);

                InterlocutorReclamoBE geb = null;
                try { geb = objRec.Interlocutor.Find(x => x.PARVW == "AP"); }
                catch { }
                
                if ( ge!= null ){
                    if( geb == null ){ 
                    objRec.Interlocutor.Add(ge);
                    }
                }

                foreach (InterlocutorReclamoBE g in objRec.Interlocutor)
                {
                    if (ladrnr.Find(x => x.Codigo.Equals(g.PARVW)) != null)
                    {
                        g.ADRNR = ladrnr.Find(x => x.Codigo.Equals(g.PARVW)).Descripcion.Trim();
                    }
                }
            }
            else
            {
                if (objRec.Interlocutor.Count > 0)
                {
                    pEmpresa = objRec.Interlocutor.Find(x => x.PARVW == "AG").KUNNR;
                    pPersonContacto = objRec.Interlocutor.Find(x => x.PARVW == "AP").PERNR; //objRec.Texto.Find(x => x.CodTexto == ParametroBC.Instance.getParamValue("TEXTO6")).CodTexto;
                    pEmpResp = objRec.Interlocutor.Find(x => x.PARVW == "ZM").PERNR;
                    if (pEmpresa == null){ pEmpresa = ""; }
                    if (pPersonContacto == null) { pPersonContacto = ""; }
                    if (pEmpResp == null) { pEmpResp = ""; }
                    InterlocutorReclamoBE ge = null;
                    try { ge = objRec.Interlocutor.Find(x => x.PARVW.Equals("AP")); }
                    catch { ge = null; }
               
                    objRec.Interlocutor = ReclamoBC.Instance.getInterXEmpresa(pEmpresa, pPersonContacto, pEmpResp, string.Empty, string.Empty, string.Empty);

                    InterlocutorReclamoBE geb = null;
                    try { geb = objRec.Interlocutor.Find(x => x.PARVW == "AP"); }
                    catch {  }

                    if (ge != null)
                    {
                        if (geb == null)
                        {
                            objRec.Interlocutor.Add(ge);
                        }
                    }
                }                
            }

            List<GenericBE> lstOficinas = new List<GenericBE>();
            List<GenericBE> lstTipoDocumento = new List<GenericBE>();
            List<GenericBE> lstGrupoVendedores = new List<GenericBE>();
            List<GenericBE> lstSectores = new List<GenericBE>();
            List<GenericBE> lstMotivos = new List<GenericBE>();
            List<GenericBE> lstGrupoCond = new List<GenericBE>();
            List<GenericBE> lstBloqueoEntrega = new List<GenericBE>();
            List<GenericBE> lstBloqueoFactura = new List<GenericBE>();
            List<GenericBE> lstVendedores = new List<GenericBE>();            
            List<GenericBE> lstTipoVisita = new List<GenericBE>();
            List<GenericBE> lvLstPrioridadEnt = new List<GenericBE>();

            ParametroBC.Instance.getDataDDL(ref lstCodigoPostal, ref lstVendedores,
                    ref lstBloqueoEntrega, ref lstBloqueoFactura,
                    ref lvLstPrioridadEnt, ref lstGrupoCond, ref lstGrupoVendedores, ref lstMotivos, ref lstOficinas, ref lstSectores,
                    ref lstTipoDocumento, ref lstTipoVisita);
            
            //objRec.Interlocutor.RemoveAll(x => x.PARVW.Equals("AP"));
            foreach (InterlocutorReclamoBE i in objRec.Interlocutor)
            {
                if (i.PARVW.Equals("AG"))//EMPRESA 
                {
                    pEmpresa = i.KUNNR;
                    pNomCliente = i.NOMBRE;

                    pRetval = pRetval.Replace("{3}", pEmpresa);
                    pRetval = pRetval.Replace("{4}", pNomCliente);
                    if (!objRec.Contactos.KUNNR.Equals(i.KUNNR) || objRec.Contactos.KUNNR.Equals(""))
                    {
                        // lleno datos del panel
                        pEmpresaDet = i.KUNNR;
                        pNomEmpresa = i.NOMBRE;
                        pDirEmpresa = i.Direccion;
                        pNIF = i.NIF == null ? "" : i.NIF;
                        pTelfEmpre = i.Telefono == null ? "" : i.Telefono;

                        pRetval = pRetval.Replace("{5}", pEmpresaDet);
                        pRetval = pRetval.Replace("{6}", pNomEmpresa);
                        pRetval = pRetval.Replace("{7}", pDirEmpresa);
                        pRetval = pRetval.Replace("{8}", pNIF);
                        pRetval = pRetval.Replace("{9}", pTelfEmpre);
                        if (lstCodigoPostal.Find(x => x.Codigo.Equals(i.CodPostal)) != null)
                        {
                            pCodpEmpresa = i.CodPostal;
                            pRetval = pRetval.Replace("{10}", pCodpEmpresa);
                        }
                        else if (!i.EsVentual)
                        {
                            pRetval = pRetval.Replace("{0}", "false");
                            pRetval = pRetval.Replace("{1}", "El código postal de la empresa no existe");
                            return;
                        }
                    }
                    // valido que sea eventual
                    if (i.EsVentual && op.Equals("crear"))
                    {
                        //txtNomEmpresa.Enabled = true;
                        //txtDirEmpresa.Enabled = true;
                        //ddlCodpEmpresa.Enabled = true;
                        //txtTelfEmpre.Enabled = true;
                        //txtNIF.Enabled = true;
                    }

                }
                else if (i.PARVW.Equals("WE") && (!pCodDestMerc.Equals(i.KUNNR) || (pCodDestMerc.Equals(""))))//DESTINATARIO DE MERCANCIA
                {                    
                    // lleno datos del panel
                    pCodDestMerc = i.KUNNR;
                    pNomDestMerc = i.NOMBRE;
                    pDirDestMerc = i.Direccion;
                    pRetval = pRetval.Replace("{11}", pCodDestMerc);
                    pRetval = pRetval.Replace("{12}", pNomDestMerc);
                    pRetval = pRetval.Replace("{13}", pDirDestMerc);
                    if (lstCodigoPostal.Find(x => x.Codigo.Equals(i.CodPostal)) != null)
                    {
                        pCodpDestMerc = i.CodPostal;
                        pRetval = pRetval.Replace("{14}", pCodpDestMerc);
                    }                        
                    else
                    {
                        pRetval = pRetval.Replace("{0}", "false");
                        pRetval = pRetval.Replace("{1}", "El código postal del destinatario  no existe");
                        return;
                    }
                }
                else if (i.PARVW.Equals("VE") && (!pCodECom.Equals(i.PERNR) || pCodECom.Equals("")))//ENCARGADO COMERCIAL
                {
                    pCodECom = i.PERNR;
                    pNomECom = i.NOMBRE;
                    pRetval = pRetval.Replace("{15}", pCodECom);
                    pRetval = pRetval.Replace("{16}", pNomECom);
                }
                else if (i.PARVW.Equals("ZM"))//EMPLEADO RESPONSABLE
                {
                    pEmpResp = i.PERNR;
                    pNombreEmpResp = i.NOMBRE;
                    pRetval = pRetval.Replace("{2}", pEmpResp);
                    pRetval = pRetval.Replace("{17}", pNombreEmpResp);
                    if (!pCodResPago.Equals(i.PERNR) || (pCodResPago.Equals("")))
                    {
                        //lleno el panel de detall
                        pCodResPago = i.PERNR;
                        pNomResPago = i.NOMBRE;
                        pRetval = pRetval.Replace("{18}", pCodResPago);
                        pRetval = pRetval.Replace("{19}", pNomResPago);
                    }
                }
                else if (i.PARVW.Equals("AP"))
                {
                    objRec.Z_Reclamo.CPOSTAL = i.CodPostal;
                    objRec.Z_Reclamo.DIRECCION = i.Direccion;
                    objRec.Z_Reclamo.NIF = i.NIF;
                    objRec.Z_Reclamo.PCONTACTO = i.NOMBRE;
                    objRec.Z_Reclamo.TELEFONO = i.Telefono;

                }
                
            }
            objRec.Interlocutor.RemoveAll(x => x.PARVW.Equals("AP"));
        }

        private bool validaDatosMP()
        {
            bool val = true;
            List<GenericBE> lst = ReclamoBC.Instance.getValidaData(objRec.Contactos.VGBEL.PadLeft(10, '0'), objRec.Z_Reclamo.MATNR, objRec.Z_Reclamo.MATNR2, objRec.Z_Reclamo.RECLA);

            if (lst == null || lst.Count <= 0)
            {
                val = false;
            }

            foreach (GenericBE g in lst)
            {
                if (g.Codigo != null)
                {
                    if ((g.Codigo.Equals("p") && (!pNumeroPedido.Equals(""))) ||
                       ((!pNumeroPedido.Equals("")) && g.Descripcion.Equals("")))
                    {
                        pValidaNumeroPedido = g.Descripcion;
                        pRetval = pRetval.Replace("{20}", pValidaNumeroPedido);
                    }   
                    else if (g.Codigo.Equals("m1") && (!pMaterial1.TrimStart('0').Equals("")))
                    {
                        pValidaMaterial1 = g.Descripcion;
                        pRetval = pRetval.Replace("{21}", pValidaMaterial1);
                    }
                    else if (g.Codigo.Equals("m2") && (!pMaterial2.TrimStart('0').Equals("")))
                    {
                        pValidaMaterial2 = g.Descripcion;
                        pRetval = pRetval.Replace("{22}", pValidaMaterial2);
                    }   
                }
            }

            if (pValidaNumeroPedido == "Invalido" || pValidaMaterial1 == "Invalido" || pValidaMaterial2 == "Invalido")
            {
                string mensaje = "";
                string resultado1 = "";
                string resultado2 = "";
                if (pValidaMaterial1 == "Invalido")
                {
                    resultado1 = "El material 1 no es válido.";
                }
                if (pValidaMaterial2 == "Invalido")
                {
                    resultado2 = "El material 2 no es válido.";
                }

                pRetval = pRetval.Replace("{0}", "false");
                pRetval = pRetval.Replace("{1}", resultado1 + " " + resultado2);
                pRetval = pRetval.Replace("{24}", "null");
                val = false; 
            }

            return val;
        }

        #region nousar
        private void guardarReclamoPedido()
        {
            GenericBE g = null;
            DocReclamoBE Doc = null;
            Doc = DocReclamo;
            if (Doc != null)
            {
                Doc.Contactos.AEDAT = DateTime.Today.Date;
                Doc.Contactos.AEZET = DateTime.Now.TimeOfDay.ToString(); //DateTime.Now.timz + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second;
                Doc.Contactos.AENAM = Request.Params["Descripcion"] != null ? Request.Params["Descripcion"] : "";
                Doc.Contactos.KTAAR = ParametroBC.Instance.getParamValue("CodReclamo");
                Doc.Contactos.VKBUR = pOfiVenta;
                Doc.Contactos.KTABG = DateTime.Parse(pFechaI);
                Doc.Contactos.KTAEN = DateTime.Parse(pFechaF);
                Doc.Contactos.KTABT = pHoraReclamoI;
                Doc.Contactos.KTAET = pHoraReclamoF;
                Doc.Contactos.KTAGR = pMotivo;
                Doc.Contactos.KTAER = pResultado;
                Doc.Contactos.KTAFK = ParametroBC.Instance.getParamValue("CodReclamo");
                Doc.Contactos.KTAEB = pJustificResul;
                Doc.Contactos.KTEXT = pComentario;
                Doc.Contactos.VGBEL = pNumeroPedido.Trim().PadLeft(10, '0');

                if (op.Equals("crear"))
                {
                    Doc.Contactos.ERDAT = DateTime.Today.Date;
                    Doc.Contactos.ERZET = DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second;
                    Doc.Contactos.ERNAM = Request.Params["Descripcion"] != null ? Request.Params["Descripcion"] : "";
                    Doc.Contactos.VBTYP = "1";
                    Doc.Contactos.TRVOG = "9";
                    Doc.Contactos.VKORG = pOrgVentas;
                    Doc.Contactos.VTWEG = pCanal;
                    Doc.Contactos.SPART = pSector;
                    Doc.Contactos.KTAST = "0";
                    Doc.Contactos.KUNNR = pEmpresa.Trim();
                    Doc.Contactos.GBSTK = "A";
                    Doc.Contactos.PARVW = "AG";
                    Doc.Contactos.KTEXT_MC = pNumeroPedido.Trim() + "/" + pMaterial2.Trim().PadLeft(10, '0');
                    Doc.Contactos.KTEXT_MC_LANGU = ParametroBC.Instance.getParamValue("Idioma");
                    //Fxvbuk: Documento comercial: Status cabecera y datos gestión                            
                    Doc.DocComercial.GBSTK = "A";
                    Doc.DocComercial.UVALL = "C";
                    Doc.DocComercial.VBTYP = "1";
                    Doc.DocComercial.VBOBJ = "K";
                    //Fxvbpa: interlocutor
                }
                // Textos
                //Tabla Z
                Doc.Z_Reclamo.MATNR = pMaterial1.Trim().PadLeft(18, '0');
                Doc.Z_Reclamo.MATNR2 = pMaterial2.Trim().PadLeft(18, '0');
                Doc.Z_Reclamo.RECLA = pReclaRef.Trim().PadLeft(10, '0');
                Doc.Texto.Clear();
                TextoBE txt1 = new TextoBE();
                txt1.CodTexto = ParametroBC.Instance.getParamValue("TEXTO1");
                txt1.Descripcion = pTextoTratemInicial.Trim();
                Doc.Texto.Add(txt1);

                TextoBE txt2 = new TextoBE();
                txt2.CodTexto = ParametroBC.Instance.getParamValue("TEXTO2");
                txt2.Descripcion = pTextoNotaDireccion.Trim();
                Doc.Texto.Add(txt2);

                TextoBE txt3 = new TextoBE();
                txt3.CodTexto = ParametroBC.Instance.getParamValue("TEXTO3");
                txt3.Descripcion = pTextoSeguimiento.Trim();
                Doc.Texto.Add(txt3);

                TextoBE txt4 = new TextoBE();
                txt4.CodTexto = ParametroBC.Instance.getParamValue("TEXTO4");
                txt4.Descripcion = pTextoDiagnostico.Trim();
                Doc.Texto.Add(txt4);

                TextoBE txt5 = new TextoBE();
                txt5.CodTexto = ParametroBC.Instance.getParamValue("TEXTO5");
                txt5.Descripcion = pTextoSolucion.Trim();
                Doc.Texto.Add(txt5);

                TextoBE txt6 = new TextoBE();
                txt6.CodTexto = ParametroBC.Instance.getParamValue("TEXTO6");
                txt6.Descripcion = pTextoPersonaContacto.Trim();
                Doc.Texto.Add(txt6);

                TextoBE txt7 = new TextoBE();
                txt7.CodTexto = ParametroBC.Instance.getParamValue("TEXTO7");
                txt7.Descripcion = pTextoDatosFacturacion.Trim();
                Doc.Texto.Add(txt7);

                TextoBE txt8 = new TextoBE();
                txt8.CodTexto = ParametroBC.Instance.getParamValue("TEXTO8");
                txt8.Descripcion = pTextoPedidoReferencia.Trim();
                Doc.Texto.Add(txt8);

                TextoBE txt9 = new TextoBE();
                txt9.CodTexto = ParametroBC.Instance.getParamValue("TEXTO9");
                txt9.Descripcion = pTextoMotivosOtros.Trim();
                Doc.Texto.Add(txt9);

                // interlocutores
                InterlocutorReclamoBE I1 = Doc.Interlocutor.Find(X => (X.PARVW.Equals("AG")));
                if (I1 != null && !pNomEmpresa.Equals(""))
                {
                    I1.CodPostal = pCodpEmpresa.Trim();
                    I1.Direccion = pDirEmpresa.Trim();
                    I1.Ciudad = lstCodigoPostal.Find(x => x.Codigo == pCodpEmpresa).Descripcion;
                    I1.Land1 = "PE";
                    I1.Name1 = pNomEmpresa;
                    I1.Telefono = pTelfEmpre;
                    I1.Telfx = pTelfEmpre;
                    I1.Mail = pEmail.Trim();
                    I1.NIF = pNIF.Trim();
                }
                g = new GenericBE();
                Doc.Z_Reclamo.CPOSTAL = pCodpPContact;
                Doc.Z_Reclamo.DIRECCION = pDirPContac;
                Doc.Z_Reclamo.NIF = pNIFCont;
                Doc.Z_Reclamo.PCONTACTO = pNomPContac;
                Doc.Z_Reclamo.TELEFONO = pTelfCont;
                if (op.Equals("editar"))
                {
                    //valido el status
                    //if ((int.Parse(Doc.Contactos.KTAST) <= int.Parse(ddlStatus.SelectedValue)))
                    //***************************************************************************
                    //cambio realizado el 22.03.2012 Rhuapaya
                    //descripción: el cambio es para todos los estados
                    //***************************************************************************
                    if (ParametroBC.Instance.esTipoX(pStatus, "Sts1"))
                    {
                        Doc.Z_Reclamo.STAT1 = pStatus;
                        Doc.Z_Reclamo.USER1 = pUsuarioStatus;
                        Doc.Z_Reclamo.FCHA1 = DateTime.Parse(pFechaSts == "" ? "01/01/0001" : pFechaSts);
                        if (!pFechaSts.Equals(""))
                            Doc.Z_Reclamo.CMM1 = pDescripcion;
                    }
                    else if (ParametroBC.Instance.esTipoX(pStatus, "Sts2"))
                    {
                        Doc.Z_Reclamo.STAT2 = pStatus;
                        Doc.Z_Reclamo.USER2 = pUsuarioStatus;
                        Doc.Z_Reclamo.CMM2 = pDescripcion;
                        if (!pFechaSts.Equals(""))
                            Doc.Z_Reclamo.FCHA2 = DateTime.Parse(pFechaSts == "" ? "01/01/0001" : pFechaSts);
                    }
                    else if ((ParametroBC.Instance.esTipoX(pStatus, "Sts3")) || (ParametroBC.Instance.esTipoX(pStatus, "Sts4")))
                    {
                        Doc.Z_Reclamo.STAT3 = pStatus;
                        Doc.Z_Reclamo.USER3 = pUsuarioStatus;
                        Doc.Z_Reclamo.CMM3 = pDescripcion;
                        if (!pFechaSts.Equals(""))
                            Doc.Z_Reclamo.FCHA3 = DateTime.Parse(pFechaSts == "" ? "01/01/0001" : pFechaSts);
                    }
                    else if (ParametroBC.Instance.esTipoX(pStatus, "Sts5"))
                    {
                        Doc.Z_Reclamo.STAT4 = pStatus;
                        Doc.Z_Reclamo.USER4 = pUsuarioStatus;
                        Doc.Z_Reclamo.CMM4 = pDescripcion;
                        if (!pFechaSts.Equals(""))
                            Doc.Z_Reclamo.FCHA4 = DateTime.Parse(pFechaSts == "" ? "01/01/0001" : pFechaSts);
                    }

                    Doc.Contactos.KTAST = pStatus;
                }
                DocReclamo = Doc;
            }

        }
        #endregion

        private DocReclamoBE leerObjetoReclamo(string reclamo)
        {
            string numP = "";
            GenericBE g = null;
            DocReclamoBE Doc = new DocReclamoBE();
            List<ZReclamoBE> zRec = new List<ZReclamoBE>();
            List<DocReclamoBE> lstRec = new List<DocReclamoBE>();
            List<ContactosReclamoBE> lstConRec = new List<ContactosReclamoBE>();
            List<TextoBE> lstTextRec = new List<TextoBE>();

            lstRec = JsonConvert.DeserializeObject<List<DocReclamoBE>>(reclamo);
            zRec = JsonConvert.DeserializeObject<List<ZReclamoBE>>(reclamo);
            lstConRec = JsonConvert.DeserializeObject<List<ContactosReclamoBE>>(reclamo);
            lstTextRec = JsonConvert.DeserializeObject<List<TextoBE>>(reclamo);

            Doc.Contactos.AEDAT = DateTime.Today.Date;
            Doc.Contactos.AEZET = DateTime.Now.ToString("HH:mm:ss"); // DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second;
            Doc.Contactos.AENAM = Request.Params["Descripcion"] != null ? Request.Params["Descripcion"] : "";
            Doc.Contactos.KTAAR = ParametroBC.Instance.getParamValue("CodReclamo");
            Doc.Contactos.KTAFK = ParametroBC.Instance.getParamValue("CodReclamo");
            
            Doc.Z_Reclamo.RECLA = zRec[0].pNumeroReclamo;
            Doc.Contactos.VGBEL = lstConRec[0].numeroPedido;
            numP = lstConRec[0].numeroPedido;
            Doc.Contactos.VKBUR = lstConRec[0].OfiVenta;
            Doc.Contactos.KTABG = lstConRec[0].fechaI == null ? DateTime.Now : Convert.ToDateTime(lstConRec[0].fechaI);
            Doc.Contactos.ERDAT = lstConRec[0].fechaI == null ? DateTime.Now : Convert.ToDateTime(lstConRec[0].fechaI);
            Doc.Contactos.KTAEN = lstConRec[0].fechaF == null ? DateTime.Now : Convert.ToDateTime(lstConRec[0].fechaF);
            Doc.Contactos.KTABT = lstConRec[0].horaReclamoI;
            Doc.Contactos.ERZET = DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second;
            Doc.Contactos.KTAET = lstConRec[0].horaReclamoF;
            Doc.Contactos.KTAGR = lstConRec[0].Motivo;
            Doc.Contactos.KTAER = lstConRec[0].Resultado;
            Doc.Contactos.KTAEB = lstConRec[0].JustificResul;
            Doc.Contactos.KTEXT = lstConRec[0].comentario;
            Doc.Contactos.ERNAM = Request.Params["Descripcion"] != null ? Request.Params["Descripcion"] : "";
            Doc.Contactos.KUNNR = lstConRec[0].empresa;
            Doc.Contactos.VKORG = lstConRec[0].OrgVenta;
            Doc.Contactos.VTWEG = lstConRec[0].Canal;
            Doc.Contactos.SPART = lstConRec[0].Sector;
            Doc.Contactos.KTEXT_MC = numP + "/" + lstConRec[0].material2;
            Doc.Contactos.KTEXT_MC_LANGU = ParametroBC.Instance.getParamValue("Idioma");
            if (op.Equals("crear"))
            {
                Doc.Contactos.ERDAT = DateTime.Today.Date;
                Doc.Contactos.ERZET = DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second;
            }
            //*******************************************************************************************
            //Fxvbuk: Documento comercial: Status cabecera y datos gestión
            Doc.Contactos.VBTYP = "1";
            Doc.Contactos.TRVOG = "9";
            Doc.Contactos.KTAST = "0";
            Doc.Contactos.GBSTK = "A";
            Doc.Contactos.PARVW = "AG";
            Doc.DocComercial.GBSTK = "A";
            Doc.DocComercial.UVALL = "C";
            Doc.DocComercial.VBTYP = "1";
            Doc.DocComercial.VBOBJ = "K";
            if (zRec[0].material11 != "")
            {
                pValidaMaterial1 = zRec[0].material11.Trim().PadLeft(18, '0');
            }
            if (zRec[0].material12 != "")
            {
                pValidaMaterial2 = zRec[0].material12.Trim().PadLeft(18, '0');
            }
            if (zRec[0].material21 != "")
            {
                pValidaMaterial1 = zRec[0].material21.Trim().PadLeft(18, '0');
            }
            if (zRec[0].material22 != "")
            {
                pValidaMaterial2 = zRec[0].material22.Trim().PadLeft(18, '0');
            }

            if (lstTextRec[0].TextoTratemInicial.Trim() != "")
            {
                TextoBE txt1 = new TextoBE();
                txt1.CodTexto = ParametroBC.Instance.getParamValue("TEXTO1");
                txt1.Descripcion = lstTextRec[0].TextoTratemInicial.Trim();
                Doc.Texto.Add(txt1);
            }
            if (lstTextRec[0].TextoNotaDireccion.Trim() != "")
            {
                TextoBE txt2 = new TextoBE();
                txt2.CodTexto = ParametroBC.Instance.getParamValue("TEXTO2");
                txt2.Descripcion = lstTextRec[0].TextoNotaDireccion.Trim();
                Doc.Texto.Add(txt2);
            }
            if (lstTextRec[0].TextoSeguimiento.Trim() != "")
            {
                TextoBE txt3 = new TextoBE();
                txt3.CodTexto = ParametroBC.Instance.getParamValue("TEXTO3");
                txt3.Descripcion = lstTextRec[0].TextoSeguimiento.Trim();
                Doc.Texto.Add(txt3);
            }
            if (lstTextRec[0].TextoDiagnostico.Trim() != "")
            {
                TextoBE txt4 = new TextoBE();
                txt4.CodTexto = ParametroBC.Instance.getParamValue("TEXTO4");
                txt4.Descripcion = lstTextRec[0].TextoDiagnostico.Trim();
                Doc.Texto.Add(txt4);
            }
            if (lstTextRec[0].TextoSolucion.Trim() != "")
            {
                TextoBE txt5 = new TextoBE();
                txt5.CodTexto = ParametroBC.Instance.getParamValue("TEXTO5");
                txt5.Descripcion = lstTextRec[0].TextoSolucion.Trim();
                Doc.Texto.Add(txt5);
            }
            if (lstTextRec[0].TextoPersonaContacto.Trim() != "")
            {
                TextoBE txt6 = new TextoBE();
                txt6.CodTexto = ParametroBC.Instance.getParamValue("TEXTO6");
                txt6.Descripcion = lstTextRec[0].TextoPersonaContacto.Trim();
                Doc.Texto.Add(txt6);
            }
            if (lstTextRec[0].TextoDatosFacturacion.Trim() != "")
            {
                TextoBE txt7 = new TextoBE();
                txt7.CodTexto = ParametroBC.Instance.getParamValue("TEXTO7");
                txt7.Descripcion = lstTextRec[0].TextoDatosFacturacion.Trim();
                Doc.Texto.Add(txt7);
            }
            if (lstTextRec[0].TextoPedidoReferencia.Trim() != "")
            {
                TextoBE txt8 = new TextoBE();
                txt8.CodTexto = ParametroBC.Instance.getParamValue("TEXTO8");
                txt8.Descripcion = lstTextRec[0].TextoPedidoReferencia.Trim();
                Doc.Texto.Add(txt8);
            }
            if (lstTextRec[0].TextoMotivosOtros.Trim() != "")
            {
                TextoBE txt9 = new TextoBE();
                txt9.CodTexto = ParametroBC.Instance.getParamValue("TEXTO9");
                txt9.Descripcion = lstTextRec[0].TextoMotivosOtros.Trim();
                Doc.Texto.Add(txt9);
            }

            //reclamo = reclamo.Replace("[", "").Replace("\"", "").Replace("{", "").Replace("}", "").Replace("]", "");
            //string[] objR = reclamo.Split(',');
            
            //foreach (var item in objR)
            //{
            //    int pos = item.IndexOf(':');
            //    string campo = item.Substring(0, pos);
            //    string valor = "";
            //    if (((item.Length - 1) - campo.Length) == 0)
            //    {
            //        valor = item.Substring(pos, (item.Length - 1) - campo.Length);
            //    }
            //    else
            //    {
            //        valor = item.Substring(pos + 1, (item.Length - 1) - campo.Length);
            //    }

            //    Doc.Contactos.AEDAT = DateTime.Today.Date;
            //    Doc.Contactos.AEZET = DateTime.Now.ToString("HH:mm:ss"); // DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second;
            //    Doc.Contactos.AENAM = Request.Params["Descripcion"] != null ? Request.Params["Descripcion"] : "";
            //    Doc.Contactos.KTAAR = ParametroBC.Instance.getParamValue("CodReclamo");
            //    Doc.Contactos.KTAFK = ParametroBC.Instance.getParamValue("CodReclamo");

            //    if (campo == "pNumeroReclamo")
            //    {
            //        Doc.Z_Reclamo.RECLA = valor.Trim().PadLeft(10, '0');
            //    }

            //    if (campo == "numeroPedido")
            //    {
            //        Doc.Contactos.VGBEL = valor.Trim().PadLeft(10, '0');                    
            //        numP = valor.Trim().PadLeft(10, '0');
            //    }
            //    else if (campo == "OfiVenta")
            //    {
            //        Doc.Contactos.VKBUR = valor.Trim();
            //    }
            //    else if (campo == "fechaI")
            //    {
            //        Doc.Contactos.KTABG = valor == "null" ? DateTime.Now : DateTime.Parse(valor);
            //        Doc.Contactos.ERDAT = valor == "null" ? DateTime.Now : DateTime.Parse(valor);
            //    }
            //    else if (campo == "fechaF")
            //    {
            //        Doc.Contactos.KTAEN = valor == "null" ? DateTime.Now : DateTime.Parse(valor);
            //    }
            //    else if (campo == "horaReclamoI")
            //    {
            //        Doc.Contactos.KTABT = valor.Trim();
            //        Doc.Contactos.ERZET = valor.Trim();
            //    }
            //    else if (campo == "horaReclamoF")
            //    {
            //        Doc.Contactos.KTAET = valor.Trim();
            //    }
            //    else if (campo == "Motivo")
            //    {
            //        Doc.Contactos.KTAGR = valor.Trim();
            //    }
            //    else if (campo == "Resultado")
            //    {
            //        Doc.Contactos.KTAER = valor.Trim();
            //    }
            //    else if (campo == "JustificResul")
            //    {
            //        Doc.Contactos.KTAEB = valor.Trim();
            //    }
            //    else if (campo == "comentario")
            //    {
            //        Doc.Contactos.KTEXT = valor.Trim();
            //    }
            //    else if (campo == "NomResPago")
            //    {
            //        Doc.Contactos.ERNAM = Request.Params["Descripcion"] != null ? Request.Params["Descripcion"] : "";
            //    }
            //    else if (campo == "empresa")
            //    {
            //        Doc.Contactos.KUNNR = valor.Trim();
            //    }
            //    else if (campo == "OrgVenta")
            //    {
            //        Doc.Contactos.VKORG = valor.Trim();
            //    }
            //    else if (campo == "Canal")
            //    {
            //        Doc.Contactos.VTWEG = valor.Trim();
            //    }
            //    else if (campo == "Sector")
            //    {
            //        Doc.Contactos.SPART = valor.Trim();
            //    }
            //    else if (campo == "material2")
            //    {
            //        Doc.Contactos.KTEXT_MC = numP + "/" + valor.Trim().PadLeft(10, '0');
            //    }
            //    Doc.Contactos.KTEXT_MC_LANGU = ParametroBC.Instance.getParamValue("Idioma");    
            //    //*******************************************************************************************
            //    if (op.Equals("crear"))
            //    {
            //        Doc.Contactos.ERDAT = DateTime.Today.Date;
            //        Doc.Contactos.ERZET = DateTime.Now.ToString("HH:mm:ss");                    
                    
            //        if (campo == "OrgVenta")
            //        {
            //            Doc.Contactos.VKORG = valor.Trim();
            //        }
            //        if (campo == "Canal")
            //        {
            //            Doc.Contactos.VTWEG = valor.Trim();
            //        }
            //        if (campo == "Sector")
            //        {
            //            Doc.Contactos.SPART = valor.Trim();
            //        }
                    
            //        if (campo == "material2")
            //        {
            //            Doc.Contactos.KTEXT_MC = numP + "/" + valor.Trim().PadLeft(10, '0');
            //        }
            //        Doc.Contactos.KTEXT_MC_LANGU = ParametroBC.Instance.getParamValue("Idioma");                    
            //    }
            //    //*******************************************************************************************
            //    //Fxvbuk: Documento comercial: Status cabecera y datos gestión
            //    Doc.Contactos.VBTYP = "1";
            //    Doc.Contactos.TRVOG = "9";
            //    Doc.Contactos.KTAST = "0";
            //    Doc.Contactos.GBSTK = "A";
            //    Doc.Contactos.PARVW = "AG";
            //    Doc.DocComercial.GBSTK = "A";
            //    Doc.DocComercial.UVALL = "C";
            //    Doc.DocComercial.VBTYP = "1";
            //    Doc.DocComercial.VBOBJ = "K";
            //    //Tabla Zf
            //    if (campo == "material11")
            //    {
            //        if (valor.Trim() != "")
            //        {
            //            pValidaMaterial1 = valor.Trim().PadLeft(18, '0');
            //        } 
            //    }
            //    if (campo == "material12")
            //    {
            //        if (valor.Trim() != "")
            //        {
            //            pValidaMaterial2 = valor.Trim().PadLeft(18, '0');
            //        }
            //    }
            //    if (campo == "material21")
            //    {
            //        if (valor.Trim() != "")
            //        {
            //            pValidaMaterial1 = valor.Trim().PadLeft(18, '0');
            //        }
            //    }
            //    if (campo == "material22")
            //    {
            //        if (valor.Trim() != "")
            //        {
            //            pValidaMaterial2 = valor.Trim().PadLeft(18, '0');
            //        }
            //    }                
                
            //    if (campo == "TextoTratemInicial")
            //    {
            //        TextoBE txt1 = new TextoBE();
            //        txt1.CodTexto = ParametroBC.Instance.getParamValue("TEXTO1");
            //        txt1.Descripcion = valor.Trim();
            //        Doc.Texto.Add(txt1);
            //    }
            //    else if (campo == "TextoNotaDireccion")
            //    {
            //        TextoBE txt2 = new TextoBE();
            //        txt2.CodTexto = ParametroBC.Instance.getParamValue("TEXTO2");
            //        txt2.Descripcion = valor.Trim();
            //        Doc.Texto.Add(txt2);
            //    }
            //    else if (campo == "TextoSeguimiento")
            //    {
            //        TextoBE txt3 = new TextoBE();
            //        txt3.CodTexto = ParametroBC.Instance.getParamValue("TEXTO3");
            //        txt3.Descripcion = valor.Trim();
            //        Doc.Texto.Add(txt3);
            //    }
            //    else if (campo == "TextoDiagnostico")
            //    {
            //        TextoBE txt4 = new TextoBE();
            //        txt4.CodTexto = ParametroBC.Instance.getParamValue("TEXTO4");
            //        txt4.Descripcion = valor.Trim();
            //        Doc.Texto.Add(txt4);
            //    }
            //    else if (campo == "TextoSolucion")
            //    {
            //        TextoBE txt5 = new TextoBE();
            //        txt5.CodTexto = ParametroBC.Instance.getParamValue("TEXTO5");
            //        txt5.Descripcion = valor.Trim();
            //        Doc.Texto.Add(txt5);
            //    }
            //    else if (campo == "TextoPersonaContacto")
            //    {
            //        TextoBE txt6 = new TextoBE();
            //        txt6.CodTexto = ParametroBC.Instance.getParamValue("TEXTO6");
            //        txt6.Descripcion = valor.Trim();
            //        Doc.Texto.Add(txt6);
            //    }
            //    else if (campo == "TextoDatosFacturacion")
            //    {
            //        TextoBE txt7 = new TextoBE();
            //        txt7.CodTexto = ParametroBC.Instance.getParamValue("TEXTO7");
            //        txt7.Descripcion = valor.Trim();
            //        Doc.Texto.Add(txt7);
            //    }
            //    else if (campo == "TextoPedidoReferencia")
            //    {
            //        TextoBE txt8 = new TextoBE();
            //        txt8.CodTexto = ParametroBC.Instance.getParamValue("TEXTO8");
            //        txt8.Descripcion = valor.Trim();
            //        Doc.Texto.Add(txt8);
            //    }
            //    else if (campo == "TextoMotivosOtros")
            //    {
            //        TextoBE txt9 = new TextoBE();
            //        txt9.CodTexto = ParametroBC.Instance.getParamValue("TEXTO9");
            //        txt9.Descripcion = valor.Trim();
            //        Doc.Texto.Add(txt9);
            //    }                
            //}
            DocReclamo = Doc;
            if (op.Equals("editar"))
            {
                DocReclamo.Contactos.VBELN = Doc.Z_Reclamo.RECLA;    
            }            
            return DocReclamo;
        }

        private DocReclamoBE LeerInterlocutoresZReclamo(string interlocutores, string cadena)
        { 
            GenericBE g = null;
            List<InterlocutorReclamoBE> lstIntR = JsonConvert.DeserializeObject<List<InterlocutorReclamoBE>>(interlocutores);
            //List<ZReclamoBE> lstIntZ = JsonConvert.DeserializeObject<List<ZReclamoBE>>(interlocutores);
            List<ZReclamoBE> objZR = JsonConvert.DeserializeObject<List<ZReclamoBE>>(cadena);
            //ZReclamoBE objZR = null;
            //try
            //{                
            //    objZR = lstIntZ.FindAll(z => z.PARVW == "AP")[0];
            //}
            //catch 
            //{
                
            //}
            //if (objZR == null)
            //{
            //    objZR = new ZReclamoBE();
            //}
            //objRec.Z_Reclamo = objZR;
            objRec.Z_Reclamo.MATNR = pValidaMaterial1;
            objRec.Z_Reclamo.MATNR2 = pValidaMaterial2;

            pValidaMaterial1 = pValidaMaterial1.PadLeft(18, '0');
            pValidaMaterial2 = pValidaMaterial2.PadLeft(18, '0');

            string pMatTmp1 = pValidaMaterial1;
            string pMatTmp2 = pValidaMaterial2;
            pMatTmp1 = pMatTmp1.TrimStart('0');
            pMatTmp2 = pMatTmp2.TrimStart('0');
            objRec.Contactos.KTEXT_MC = objRec.Contactos.VGBEL.Trim() + "/" + pMatTmp2.PadLeft(10, '0');
            objRec.Z_Reclamo.RECLA = objZR[0].reclamoRef.Trim().PadLeft(10, '0');
            g = new GenericBE();
            if (op.Equals("editar"))
            {
                if (ParametroBC.Instance.esTipoX(objZR[0].Status.Trim(), "Sts1"))
                {
                    objRec.Z_Reclamo.STAT1 = objZR[0].Status.Trim();
                    objRec.Z_Reclamo.USER1 = objZR[0].UsuarioStatus.Trim();
                    objRec.Z_Reclamo.FCHA1 = DateTime.Parse(objZR[0].fechaSts == "null" ? "01/01/1900" : objZR[0].fechaSts);
                    if (!objZR[0].fechaSts.Trim().Equals(""))
                        objRec.Z_Reclamo.CMM1 = objZR[0].Descripcion.Trim();
                }
                else if (ParametroBC.Instance.esTipoX(objZR[0].Status.Trim(), "Sts2"))
                {
                    objRec.Z_Reclamo.STAT2 = objZR[0].Status.Trim();
                    objRec.Z_Reclamo.USER2 = objZR[0].UsuarioStatus.Trim();
                    objRec.Z_Reclamo.CMM2 = objZR[0].Descripcion.Trim();
                    if (!objZR[0].fechaSts.Trim().Equals(""))
                        objRec.Z_Reclamo.FCHA2 = DateTime.Parse(objZR[0].fechaSts == "null" ? "01/01/1900" : objZR[0].fechaSts);
                }
                else if ((ParametroBC.Instance.esTipoX(objZR[0].Status.Trim(), "Sts3")) || (ParametroBC.Instance.esTipoX(objZR[0].Status.Trim(), "Sts4")))
                {
                    objRec.Z_Reclamo.STAT3 = objZR[0].Status.Trim();
                    objRec.Z_Reclamo.USER3 = objZR[0].UsuarioStatus.Trim();
                    objRec.Z_Reclamo.CMM3 = objZR[0].Descripcion.Trim();
                    if (!objZR[0].fechaSts.Trim().Equals(""))
                        objRec.Z_Reclamo.FCHA3 = DateTime.Parse(objZR[0].fechaSts == "null" ? "01/01/1900" : objZR[0].fechaSts);
                }
                else if (ParametroBC.Instance.esTipoX(objZR[0].Status.Trim(), "Sts5"))
                {
                    objRec.Z_Reclamo.STAT4 = objZR[0].Status.Trim();
                    objRec.Z_Reclamo.USER4 = objZR[0].UsuarioStatus.Trim();
                    objRec.Z_Reclamo.CMM4 = objZR[0].Descripcion.Trim();
                    if (!objZR[0].fechaSts.Trim().Equals(""))
                        objRec.Z_Reclamo.FCHA4 = DateTime.Parse(objZR[0].fechaSts == "null" ? "01/01/1900" : objZR[0].fechaSts);
                }

                objRec.Contactos.KTAST = objZR[0].Status.Trim();
            }
            //****************************************************************
            //leemos la cadena
            //cadena = cadena.Replace("[", "").Replace("\"", "").Replace("{", "").Replace("}", "").Replace("]", "");
            //string[] objR = cadena.Split(',');
            //string numP = "";
            //foreach (var item in objR)
            //{
            //    int pos = item.IndexOf(':');
            //    string campo = item.Substring(0, pos);
            //    string valor = "";
            //    if (((item.Length - 1) - campo.Length) == 0)
            //    {
            //        valor = item.Substring(pos, (item.Length - 1) - campo.Length);
            //    }
            //    else
            //    {
            //        valor = item.Substring(pos + 1, (item.Length - 1) - campo.Length);
            //    }

            //    objRec.Z_Reclamo.MATNR = pValidaMaterial1;
            //    objRec.Z_Reclamo.MATNR2 = pValidaMaterial2;

            //    pValidaMaterial1 = pValidaMaterial1.PadLeft(18, '0');
            //    pValidaMaterial2 = pValidaMaterial2.PadLeft(18, '0');

            //    string pMatTmp1 = pValidaMaterial1;
            //    string pMatTmp2 = pValidaMaterial2;
            //    pMatTmp1 = pMatTmp1.TrimStart('0');
            //    pMatTmp2 = pMatTmp2.TrimStart('0');
            //    objRec.Contactos.KTEXT_MC = objRec.Contactos.VGBEL.Trim() + "/" + pMatTmp2.PadLeft(10, '0');

            //    if (campo == "reclamoRef")
            //    {
            //        objRec.Z_Reclamo.RECLA = valor.Trim().PadLeft(10, '0');
            //    }
            //    g = new GenericBE();

            //    if (op.Equals("editar"))
            //    {
            //        if (campo == "Status")
            //        {
            //            //volvemos a cargar el texto origen para recorrelo de nuevo y asignales
            //            //los datos correspondientes
            //            string usuStatus = "";
            //            string fecStatus = "";
            //            string desStatus = "";

            //            foreach (var item3 in objR)
            //            {
            //                int pos3 = item3.IndexOf(':');
            //                string campo3 = item3.Substring(0, pos3);
            //                string valor3 = "";
            //                if (((item3.Length - 1) - campo3.Length) == 0)
            //                {
            //                    valor3 = item3.Substring(pos3, (item3.Length - 1) - campo3.Length);
            //                }
            //                else
            //                {
            //                    valor3 = item3.Substring(pos3 + 1, (item3.Length - 1) - campo3.Length);
            //                }
            //                if (campo3 == "UsuarioStatus")
            //                {
            //                    usuStatus = valor3.Trim();
            //                }
            //                else if (campo3 == "fechaSts")
            //                {
            //                    fecStatus = valor3.Trim();
            //                }
            //                else if (campo3 == "Descripcion")
            //                {
            //                    desStatus = valor3.Trim();
            //                }
            //            }

            //            if (ParametroBC.Instance.esTipoX(valor.Trim(), "Sts1"))
            //            {
            //                objRec.Z_Reclamo.STAT1 = valor.Trim();
            //                objRec.Z_Reclamo.USER1 = usuStatus.Trim();
            //                objRec.Z_Reclamo.FCHA1 = DateTime.Parse(fecStatus == "null" ? "01/01/1900" : fecStatus);
            //                if (!fecStatus.Equals(""))
            //                    objRec.Z_Reclamo.CMM1 = desStatus.Trim();
            //            }
            //            else if (ParametroBC.Instance.esTipoX(valor.Trim(), "Sts2"))
            //            {
            //                objRec.Z_Reclamo.STAT2 = valor.Trim();
            //                objRec.Z_Reclamo.USER2 = usuStatus.Trim();
            //                objRec.Z_Reclamo.CMM2 = desStatus.Trim();
            //                if (!fecStatus.Equals(""))
            //                    objRec.Z_Reclamo.FCHA2 = DateTime.Parse(fecStatus == "null" ? "01/01/1900" : fecStatus);
            //            }
            //            else if ((ParametroBC.Instance.esTipoX(valor.Trim(), "Sts3")) || (ParametroBC.Instance.esTipoX(valor.Trim(), "Sts4")))
            //            {
            //                objRec.Z_Reclamo.STAT3 = valor.Trim();
            //                objRec.Z_Reclamo.USER3 = usuStatus.Trim();
            //                objRec.Z_Reclamo.CMM3 = desStatus.Trim();
            //                if (!fecStatus.Equals(""))
            //                    objRec.Z_Reclamo.FCHA3 = DateTime.Parse(fecStatus == "null" ? "01/01/1900" : fecStatus);
            //            }
            //            else if (ParametroBC.Instance.esTipoX(valor.Trim(), "Sts5"))
            //            {
            //                objRec.Z_Reclamo.STAT4 = valor.Trim();
            //                objRec.Z_Reclamo.USER4 = usuStatus.Trim();
            //                objRec.Z_Reclamo.CMM4 = desStatus.Trim();
            //                if (!fecStatus.Equals(""))
            //                    objRec.Z_Reclamo.FCHA4 = DateTime.Parse(fecStatus == "null" ? "01/01/1900" : fecStatus);
            //            }
            //            objRec.Contactos.KTAST = valor.Trim();
            //        }
            //    }
            //}

            if (op == "editar")
            {
                objRec.Z_Reclamo.VBELN = pNumeroReclamo;    
            }
            objRec.Interlocutor = lstIntR;
            return objRec;
        }
    }
}
